home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / fb386 / tank / tank.bas next >
BASIC Source File  |  1993-11-30  |  4KB  |  120 lines

  1. 10 '******* VS TANK BATTLE  for F-BASIC386Ver1.1L21
  2. 20 '*******                   by KIM (Tekefumi Kimura)
  3. 30 '*******                                   1993.8
  4. 40 SCREEN@0:COLOR,0:VIEW:WINDOW:PALETTE:CLS
  5. 50 '** スプライト作成
  6. 60 RAD=3.14159!/180:DIM CHA1%(64),CHA2%(64)
  7. 70 FOR D=0 TO 80 STEP 10:SIND=SIN(D*RAD):COSD=COS(D*RAD)
  8. 80  RESTORE 1110:CLS
  9. 90  FOR I=0 TO 7:IY=I-3.5!:READ CH1$,CH2$
  10. 100   FOR J=0 TO 15 STEP .5!:JX=J-7.5!
  11. 110    CH1=VAL("&H"+MID$(CH1$,INT(J)+1,1))
  12. 120    CH2=VAL("&H"+MID$(CH2$,INT(J)+1,1))
  13. 130    XX=7.5!+COSD*JX-SIND*IY
  14. 140    YY=7.5!+COSD*IY+SIND*JX
  15. 150    PSET(XX,YY),%+CH1:PSET(XX+16,YY),%+CH2
  16. 160  NEXT J,I
  17. 170  GET@A(0,0)-(15,15),CHA1%:GET@A(16,0)-(31,15),CHA2%
  18. 180  DEF SPRITE 0,D/10,CHA1%,0:DEF SPRITE 0,9+D/10,CHA2%,0
  19. 190 NEXT D
  20. 200 DEF SPRITE 3,0
  21. 210 PALETTE 12,2:PALETTE 10,4
  22. 220 DEF SPRITE 3,1
  23. 230 '** タイトル
  24. 240 SCREEN@1:CLS:SPRITE ON:SPRITE SCREEN(32,0)
  25. 250 LINE(0,0)-(319,239),PSET,[50,50,50],BF
  26. 260 SYMBOL(50,100),"VS TANK BATTLE",1,1,6,,,1
  27. 270 SYMBOL(150,150),"PUSH 'RUN' BUTTON",1,1,1,,,1
  28. 280 WHILE PTRIG(1)<>4 AND PTRIG(2)<>4:WEND
  29. 290 '** スプライト初期設定
  30. 300 FOR I=0 TO 1
  31. 310  DEF SPRITE 1,I,(0,0),9,,,,I:DEF SPRITE 1,2+I,(0,0),0,,,,I
  32. 320 NEXT I
  33. 330 '** 戦車を置く
  34. 340 FOR I=0 TO 3:SPRITE 0,I,1:NEXT
  35. 350 'SPRITE 6,0,100,120:SPRITE 6,2,100,120:SPRITE 6,1,200,120:SPRITE 6,3,200,120
  36. 360 '** スクリーンの設定
  37. 370 LINE(0,0)-(319,239),PSET,[50,50,50],BF
  38. 380 FOR I=0 TO 15:FOR J=0 TO 11
  39. 390   LINE(32+I*16,24+J*16)-(32+I*16+15,24+J*16+15),PSET,0,BF,[0,0,50]
  40. 400 NEXT J,I
  41. 410 '** 変数の設定
  42. 420 K=0:RAD=3.14159!/180
  43. 430 FOR I=0 TO 1
  44. 440  D(I)=RND*360:HD(I)=D(I)
  45. 450  X(I)=70+100*I+60*RND:Y(I)=120:DM(I)=0
  46. 460  SYMBOL(22+I*282,22),"DAMAGE",.5!,.5!,3,3,,,1
  47. 470 NEXT
  48. 480 '**** メインルーチン
  49. 490 WHILE K=0
  50. 500 FOR I=0 TO 1
  51. 510  PT=PTRIG(I+1):PA=PAD(I+1)
  52. 520  D(I)=D(I)-((PA=3)-(PA=7))*3
  53. 530  D(I)=D(I)+((D(I)>=360)-(D(I)<0))*360
  54. 540  HD(I)=HD(I)-((PT=1)-(PT=2))*5
  55. 550  HD(I)=HD(I)+((HD(I)>=360)-(HD(I)<0))*360
  56. 560  GOSUB 680:GOSUB 770:GOSUB 860:GOSUB 960
  57. 570  GET@A(X(I)+40,Y(I)+8)-(X(I)+40,Y(I)+8),C%
  58. 580  IF C%(0)=6342 THEN DM(I)=DM(I)+1:Q=I:GOSUB 1070
  59. 590 NEXT
  60. 600 SPRITE TIME
  61. 610 WEND
  62. 620 '** 勝ち表示
  63. 630 SYMBOL(60,100),STR$(2-W)+" PLAYERの勝ち!",1,1,6,,,1
  64. 640 WAIT 200
  65. 650 WHILE PTRIG(1)=0 AND PTRIG(2)=0:WEND:GOTO 250
  66. 660 '---- サブルーチン
  67. 670 '** 自走車の回転
  68. 680 DD=D(I):DD=DD+(AD>=356)*360:DD%=DD/10
  69. 690 SPRITE 1,2+I,(DD% MOD 9)
  70. 700 ON INT(DD%/9)+1 GOTO 710,720,730,740
  71. 710 SPRITE 3,2+I,0:GOTO 750
  72. 720 SPRITE 3,2+I,6:GOTO 750
  73. 730 SPRITE 3,2+I,3:GOTO 750
  74. 740 SPRITE 3,2+I,5
  75. 750 RETURN
  76. 760 '** 砲塔の回転
  77. 770 AD=D(I)+HD(I):AD=AD+(AD>=356)*360:AD%=AD/10
  78. 780 SPRITE 1,I,(AD% MOD 9)+9
  79. 790 ON INT(AD%/9)+1 GOTO 800,810,820,830
  80. 800 SPRITE 3,I,0:GOTO 840
  81. 810 SPRITE 3,I,6:GOTO 840
  82. 820 SPRITE 3,I,3:GOTO 840
  83. 830 SPRITE 3,I,5
  84. 840 RETURN
  85. 850 '** 戦車の移動
  86. 860 BX=X(I):BY=Y(I)
  87. 870 X(I)=X(I)+COS(D(I)*RAD):Y(I)=Y(I)+SIN(D(I)*RAD)
  88. 880 A=(X(I)-X(-(I=0)))^2+(Y(I)-Y(-(I=0)))^2
  89. 890 IF A<144 THEN X(I)=BX:Y(I)=BY:DM(I)=DM(I)+1:Q=I:GOSUB 1070:GOTO 920
  90. 900 IF X(I)<0 OR X(I)>239 OR Y(I)<24 OR Y(I)>204 THEN ELSE 920
  91. 910 X(I)=BX:Y(I)=BY:DM(I)=DM(I)+1:Q=I:GOSUB 1070
  92. 920 MX=X(I)-SPRITE(I,6):MY=Y(I)-SPRITE(I,7)
  93. 930 SPRITE 6,I,MX,MY:SPRITE 6,2+I,MX,MY
  94. 940 RETURN
  95. 950 '** 戦車砲発射
  96. 960 L(I)=L(I)-1
  97. 970 IF PT<>4 OR L(I)>0 THEN 1050 ELSE L(I)=20
  98. 980 BEEP
  99. 990 A=SIN(-AD*RAD)*(X(I)-X(-(I=0)))+COS(-AD*RAD)*(Y(I)-Y(-(I=0)))
  100. 1000 B=COS(-AD*RAD)*(X(I)-X(-(I=0)))-SIN(-AD*RAD)*(Y(I)-Y(-(I=0)))
  101. 1010 IF ABS(A)<8 AND B<0 AND B>-100 THEN 1040
  102. 1020 CIRCLE(X(I)+COS(AD*RAD)*100+40,Y(I)+SIN(AD*RAD)*100+8),8,[50,50,50],,,,F
  103. 1030 GOTO 1050
  104. 1040 FOR J=0 TO 6:Q=-(I=0):DM(Q)=DM(Q)+1:GOSUB 1070:NEXT
  105. 1050 RETURN
  106. 1060 '** ダメージ表示
  107. 1070 LINE(16+Q*282,217-DM(Q)*3)-(22+Q*282,218-DM(Q)*3),PSET,[0,DM(Q)*4,255-DM(Q)*4],BF
  108. 1080 IF DM(Q)>=55 THEN W=-(Q=1):K=1
  109. 1090 RETURN
  110. 1100 '** キャラデータ
  111. 1110 ' 戦車*---*---*---*---   *---*---*---*---砲塔
  112. 1120 DATA "9988998899889900","0000000000000000"
  113. 1130 DATA "CCCCCCCCCCCC6600","0000AAAA00000000"
  114. 1140 DATA "4CCCCCCCCCCC6600","00AAAAAAA0000000"
  115. 1150 DATA "44CCCCCCCCCC6600","0AAAAAAAABBBBBBB"
  116. 1160 DATA "44CCCCCCCCCC6600","0AAA222AABBBBBBB"
  117. 1170 DATA "4CCCCCCCCCCC6600","00AA222AA0000000"
  118. 1180 DATA "CCCCCCCCCCCC6600","0000AAAA00000000"
  119. 1190 DATA "9988998899889900","0000000000000000"
  120.